package com.home;

import com.sun.org.apache.xpath.internal.operations.Bool;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;
import java.util.Scanner;

/**
 * Created by netsasha on 17.10.2014.
 */
public class Main2
{
    public static void testNextFeatureScanner()
    {
        System.out.println("Next Feature...");

        System.out.println("Input a and b: ");

        int a = new Scanner(System.in).nextInt();
        int b = new Scanner(System.in).nextInt();

        System.out.println("Sum of " + a + " and " + b + " equals " + (a+b));

        String s = "1 22 333 4444 55555";
        Scanner scanner = new Scanner(s);
        while (scanner.hasNextInt())
            System.out.println("Next Int: " + scanner.nextInt());
    }

    public static void testNextFeatureFileInputOutputStream()
    {
        /***** Stupid Empty-File Creation ****
        File f = new File("file1.txt");
        try
        {
            f.createNewFile();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        */

        try
        {
            Scanner scanner = new Scanner(new File("file1.txt"));
            while (scanner.hasNext())
                System.out.println(scanner.next());
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }


        Date date = new Date();

        boolean bool = false;

        //String[] arr = {"a", "bb", "ccc"};
        //arr.length;

        java.util.concurrent.atomic.AtomicInteger ai = new java.util.concurrent.atomic.AtomicInteger();

        ai.set(9000);
        System.out.println(ai);

        badFuncIntInOut(ai);
        System.out.println(ai);

        Cat.a = 5;

        String s = "z";
        String s2 = "b";

        s = s.replace('z', 'a');
        s2 = s2.replace('b', 'a');

        System.out.println(s);
        System.out.println(s2);

        boolean b = (s == "a");
        System.out.println(b);
        b = (s == s2);
        System.out.println(b);

        System.out.println(s.equals(s2));
        System.out.println(s.equals("a"));

        /*int a;  --  не инициализировано
        System.out.println(a);*/

        /*boolean isb;  --  не инициализировано
        System.out.println(isb);*/

        //Boolean - wrapper для bool
        Boolean isB = false;
        System.out.println(isB);

        return;

        System.out.println("Unreachable code!");
    }

    private static void badFuncIntInOut(java.util.concurrent.atomic.AtomicInteger ai)
    {
        // Для того чтобы вернуть значение для примитивного типа (для ссылочного типа проблемы нет) в формальный параметр можно
        /*
        * 1. Отказаться от этой идеи и перейти на нормальный ООП дизайн - возврат результата функции, остальное через exception
        * 2. Если очень нужно, то можно использовать java.util.concurrent.atomic.AtomicInteger
        * 3. Можно написать свой wrapper (то же враппер надо писать если надо изменить саму ссылку на объект, а не сам объект)
        * 4. Можно сделать как отдельную переменную внутри класса
        * 5. Говновраппер типа int[]
        * */

        int x = ai.get();
        x += 1;
        ai.set(x);
    }

    public static class Cat
    {
        public static int a;
    }
}

class VarTest
{
    public VarTest()
    {
        VarTest.staticVar = 9000;
        this.objVar = 100500;
    }

    public static int staticVar;
    public int objVar;

    public int sum(int a, int b)
    {
        return a + b;
    }
}
